# -*- coding:UTF-8 -*-
'''
Created on 2013-6-5

@author: Administrator
'''

'''
apply(func[, nkw][, kw]) a 用可选的参数来调用func，nkw 为非关键字参数，kw 关
键字参数；返回值是函数调用的返回值。
filter(func, seq)b 调用一个布尔函数func 来迭代遍历每个seq 中的元素； 返回一个
使func 返回值为ture 的元素的序列。
map(func, seq1[,seq2...])b 将函数func 作用于给定序列（s)的每个元素，并用一个列表来提
供返回值；如果func 为None， func 表现为一个身份函数，返回
一个含有每个序列中元素集合的n 个元组的列表。
reduce(func, seq[, init]) 将二元函数作用于seq 序列的元素，每次携带一对（先前的结果
以及下一个序列元素），连续的将现有的结果和下雨给值作用在获
得的随后的结果上，最后减少我们的序列为一个单一的返回值；如
果初始值init 给定，第一个比较会是init 和第一个序列元素而不
是序列的头两个元素。
#426 偏函数
偏函数，固化第一个参数为固定参数，并返回另一个带n-1个参数函数对象
'''

from operator import add, sub
from random import choice, randint

def tt():
    pass

# 关键字参数
def net_conn(host, port):
    '''关键字参数的调用'''
    pass
net_conn(host='hanjiewu', port=8080)
net_conn(port=8080, host='hanjiewu')

ops = {'+': add, '-': sub}
MAXTRIES = 2

def doprob():
    op = choice('+-')
    nums = [randint(1, 10) for i in range(2)]  # @UnusedVariable
    nums.sort(reverse=True)
    ans = ops[op](*nums)
    pr = '%d %s %d = ' % (nums[0], op, nums[1])
    oops = 0
    
    while True:
        try:
            if int(raw_input(pr)) == ans:
                print 'correct'
                break
            if oops == MAXTRIES:
                print 'answer\n%s%d' % (pr, ans)
            else:
                print 'incorrect... try again'
                oops += 1
        except(KeyboardInterrupt, EOFError, ValueError):
            print 'invalid input... trg again'
    
def main():
    while True:
        doprob()
        try:
            opt = raw_input('Again?[y]').lower()
            if opt and opt[0] == 'n':
                break
        except (KeyboardInterrupt, EOFError):
            break
if __name__ == '__main__':
    main()